﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Security;
using System.Security.Cryptography;
using System.Text;

/// <summary>
/// Summary description for clsPublic
/// </summary>
public class clsPublic
{
	public clsPublic()
	{
		//
		// TODO: Add constructor logic here
		//
	}
    public static string myURL()
    {
        return System.Configuration.ConfigurationManager.AppSettings["domain"].ToString();
        //return "http://localhost:2498/quanlythuphi/";//       
        //return "http://thuphi.anhviet.edu.vn/";//
    }
    #region MaHoaChuoiDangNhap
    public static string MaHoaChuoiDangNhap(string str)
    {
        Byte[] tmpSource;
        Byte[] tmpHash;
        string sSourcedata = str;
        tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourcedata);
        tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);
        return ByteArrayToString(tmpHash);
    }
    
    public static string ByteArrayToString(Byte[] arryInput)
    {
        int i;
        StringBuilder sOutput = new StringBuilder(arryInput.Length);
        for (i = 0; i < arryInput.Length; i++)
        {
            sOutput.Append(arryInput[i].ToString());
        }
        return sOutput.ToString();
    }

    private string mahoaMD5(string p)
    {
        byte[] pass;
        byte[] passMD5;
        pass = ASCIIEncoding.ASCII.GetBytes(p);
        passMD5 = new MD5CryptoServiceProvider().ComputeHash(pass);
        string password = passMD5.GetValue(2).ToString();
        string pass_return = "";
        for (int i = 0; i < password.Length; i++)
        {
            pass_return = pass_return + passMD5.GetValue(i).ToString();
        }
        return pass_return;

    }
    #endregion

    #region Đọc tiền thành chữ
    public static String TotalText(decimal total)
    {
        try
        {
            string rs = "";
            total = Math.Round(total, 0);
            string[] ch = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };
            string[] rch = { "lẻ", "mốt", "", "", "", "lăm" };
            string[] u = { "", "mươi", "trăm", "ngàn", "", "", "triệu", "", "", "tỷ", "", "", "ngàn", "", "", "triệu" };
            string nstr = total.ToString();

            int[] n = new int[nstr.Length];
            int len = n.Length;
            for (int i = 0; i < len; i++)
            {
                n[len - 1 - i] = Convert.ToInt32(nstr.Substring(i, 1));
            }

            for (int i = len - 1; i >= 0; i--)
            {
                if (i % 3 == 2)// số 0 ở hàng trăm
                {
                    if (n[i] == 0 && n[i - 1] == 0 && n[i - 2] == 0) continue;//nếu cả 3 số là 0 thì bỏ qua không đọc
                }
                else if (i % 3 == 1) // số ở hàng chục
                {
                    if (n[i] == 0)
                    {
                        if (n[i - 1] == 0) { continue; }// nếu hàng chục và hàng đơn vị đều là 0 thì bỏ qua.
                        else
                        {
                            rs += " " + rch[n[i]]; continue;// hàng chục là 0 thì bỏ qua, đọc số hàng đơn vị
                        }
                    }
                    if (n[i] == 1)//nếu số hàng chục là 1 thì đọc là mười
                    {
                        rs += " mười"; continue;
                    }
                }
                else if (i != len - 1)// số ở hàng đơn vị (không phải là số đầu tiên)
                {
                    if (n[i] == 0)// số hàng đơn vị là 0 thì chỉ đọc đơn vị
                    {
                        if (i + 2 <= len - 1 && n[i + 2] == 0 && n[i + 1] == 0) continue;
                        rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);
                        continue;
                    }
                    if (n[i] == 1)// nếu là 1 thì tùy vào số hàng chục mà đọc: 0,1: một / còn lại: mốt
                    {
                        rs += " " + ((n[i + 1] == 1 || n[i + 1] == 0) ? ch[n[i]] : rch[n[i]]);
                        rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);
                        continue;
                    }
                    if (n[i] == 5) // cách đọc số 5
                    {
                        if (n[i + 1] != 0) //nếu số hàng chục khác 0 thì đọc số 5 là lăm
                        {
                            rs += " " + rch[n[i]];// đọc số 
                            rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);// đọc đơn vị
                            continue;
                        }
                    }
                }
                rs += " " + ch[n[i]];// đọc số
                rs += " " + (i % 3 == 0 ? u[i] : u[i % 3]);// đọc đơn vị
            }
            if (rs[rs.Length - 1] != ' ')
                rs += " đồng";
            else
                rs += "đồng";

            if (rs.Length > 2)
            { 
                string rs1 = rs.Substring(0,2);
                rs1 = rs1.ToUpper();
                rs = rs.Substring(2);
                rs = rs1 + rs;
            }
            return rs.Trim();
        }
        catch
        {
            return "";
        }

    }
    #endregion

    #region Ngày trong tuần
    public static string DayOfWeekViet(string dayofweek)
    {
        switch (dayofweek)
        { 
            case "Monday":
                dayofweek = "Thứ 2";
                break;
            case "Tuesday":
                dayofweek = "Thứ 3";
                break;
            case "Wednesday":
                dayofweek = "Thứ 4";
                break;
            case "Thursday":
                dayofweek = "Thứ 5";
                break;
            case "Friday":
                dayofweek = "Thứ 6";
                break;
            case "Saturday":
                dayofweek = "Thứ 7";
                break;
            case "Sunday":
                dayofweek = "CN";
                break;                       
        }
        return dayofweek;
    }
    #endregion

    #region Số ngày trong tháng
    public static int DayInMonth(int month, int year)
    {
        int CountDay = 0;
        if (month == 2)
        {
            if ((year % 4 == 0 && year % 100 != 0) | (year % 400 == 0))
            {
                CountDay = 29;
            }
            else
            {
                CountDay = 28;
            }
        }
        else
        { 
            switch (month)
            {
                case 1:
                    CountDay = 31;
                    break;
                case 3:
                    CountDay = 31;
                    break;
                case 5:
                    CountDay = 31;
                    break;
                case 7:
                    CountDay = 31;
                    break;
                case 8:
                    CountDay = 31;
                    break;
                case 10:
                    CountDay = 31;
                    break;
                case 12:
                    CountDay = 31;
                    break;
                case 4:
                    CountDay = 30;
                    break;
                case 6:
                    CountDay = 30;
                    break;
                case 9:
                    CountDay = 30;
                    break;
                case 11:
                    CountDay = 30;
                    break;
            }
        }
        return CountDay;
    }
    #endregion

    #region GenerateCode
    public static string GenerateCode(string preCode, string FieldName, int numLen, System.Data.DataTable dt)
    {
        string result = preCode;
        int max = 0;
        string code = "";
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            int temp = 0;
            try
            {
                code = dt.Rows[i][FieldName].ToString();
                code = code.Substring(code.LastIndexOf(".") + 1);
                temp = Convert.ToInt32(code.Replace(preCode, ""));
            }
            catch { }
            if (max < temp)
                max = temp;
        }
        max++;
        code = max.ToString();
        if (numLen < 2)
            numLen = 2;
        else if (numLen > 8)
            numLen = 8;
        while (code.Length < numLen)
            code = "0" + code;
        return result + code;
    }
    #endregion

    #region Lấy địa chỉ Ip và Browser
    public static string GetIPAddress(System.Web.UI.Page page)
    {

        return page.Page.Request.UserHostAddress;
    }

    public static string GetIPAddress(System.Web.UI.UserControl uc)
    {

        return uc.Page.Request.UserHostAddress;
    }

    public static string GetBrowser(System.Web.UI.Page page)
    {
        
        return page.Page.Request.Browser.Browser + " " + page.Page.Request.Browser.Version;
    }

    public static string GetBrowser(System.Web.UI.UserControl uc)
    {

        return uc.Page.Request.Browser.Browser + " " + uc.Page.Request.Browser.Version;
    }
    #endregion
}